package com.yinp.proapp.utils;

import android.content.Context;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;

public class LocationHelper {
    private LocationCallBack callBack;

    private static LocationHelper helper;
    private LocationClient locationClient;

    public LocationHelper(Context context) {
        //第一步实例化定位核心类
        locationClient = new LocationClient(context, getLocOption());

        //第二步设置位置变化回调监听
        locationClient.registerLocationListener(mListener);

    }


//    public static LocationHelper getInstance(Context context) {
//        if (helper == null) {
//            helper = new LocationHelper(context);
//        }
//        return helper;
//    }


    public void start() {
//        第三步开始定位
        locationClient.start();
    }


//一般会在Activity的OnDestroy方法调用

    public void stop() {
        if (locationClient != null) {
            locationClient.unRegisterLocationListener(mListener);

            locationClient.stop();

            locationClient = null;

        }

    }


    private LocationClientOption getLocOption() {
        LocationClientOption mOption = new LocationClientOption();
        mOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); // 可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        mOption.setCoorType("bd09ll"); // 可选，默认gcj02，设置返回的定位结果坐标系，如果配合百度地图使用，建议设置为bd09ll;
        mOption.setScanSpan(0); // 可选，默认0，即仅定位一次，设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
        mOption.setOnceLocation(true);
        mOption.setIsNeedAddress(true); // 可选，设置是否需要地址信息，默认不需要
        mOption.setIsNeedLocationDescribe(true); // 可选，设置是否需要地址描述
        mOption.setNeedDeviceDirect(false); // 可选，设置是否需要设备方向结果
        mOption.setLocationNotify(false); // 可选，默认false，设置是否当gps有效时按照1S1次频率输出GPS结果
        mOption.setIgnoreKillProcess(true); // 可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop
        mOption.setIsNeedLocationDescribe(true); // 可选，默认false，设置是否需要位置语义化结果，可以在BDLocation
        mOption.setIsNeedLocationPoiList(false); // 可选，默认false，设置是否需要POI结果，可以在BDLocation
        mOption.SetIgnoreCacheException(false); // 可选，默认false，设置是否收集CRASH信息，默认收集
        mOption.setOpenGps(true); // 可选，默认false，设置是否开启Gps定位
        mOption.setIsNeedAltitude(false); // 可选，默认false，设置定位时是否需要海拔信息，默认不需要，除基础定位版本都可用
        return mOption;
    }

    private BDAbstractLocationListener mListener = new BDAbstractLocationListener() {
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            if (callBack != null && bdLocation != null) {
                callBack.callBack(bdLocation);
            }
        }
    };


    public interface LocationCallBack {
        void callBack(BDLocation bdLocation);
    }


    public LocationCallBack getCallBack() {
        return callBack;

    }

    public void setCallBack(LocationCallBack callBack) {
        this.callBack = callBack;
    }
}
